import path from 'node:path';
import { app, BrowserWindow, ipcMain, dialog } from "electron";
import { initDatabase, closeDatabase } from './database/index';
// import { update } from "./update";
import logger, { deleteHistoryLog } from './logger'
import $config from '../config/config.json';
import { ipcAppInit, ipcWindowInit } from "./utils/ipcInit"
process.env.DIST = path.join(__dirname, '../dist');
import AutoImportTask from "./utils/autoImportTask"
// 判断是否开发环境 app.isPackaged
process.env.PUBLIC = app.isPackaged ? process.env.DIST : path.join(process.env.DIST, '../public')
// 忽略Electron的警告
process.env["ELECTRON_DISABLE_SECURITY_WARNINGS"] = "true";
app.commandLine.appendSwitch("disable-web-security");
app.commandLine.appendSwitch("disable-features", "OutOfBlinkCors"); // 允许跨域
app.commandLine.appendSwitch("--ignore-certificate-errors", "true"); // 忽略证书相关错误
// let openDevTools = import.meta.env.DEV || true;
let openDevTools = true;
let win: BrowserWindow | null
const VITE_DEV_SERVER_URL = process.env['VITE_DEV_SERVER_URL'];
// 解决控制台警告
// process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';
// 创建主进程窗口
function createWindow() {
  win = new BrowserWindow({
    title: $config.title,
    width: 1000, //窗口的宽度（以像素为单位，默认值为800）。
    height: 600,  //窗口的高度（以像素为单位，默认值为600）
    // width: Math.floor((width * 2) / 3),
    // height: Math.floor((height * 2) / 3),
    minWidth: 1000,
    minHeight: 600, // 窗口的最小宽度
    frame: false, // 窗口无边框
    alwaysOnTop: false, // alwaysOnTop： Boolean - 窗口是否总是显示在其他窗口之前. 在 Linux 上无效. 默认为 false
    center: true,  //是否在屏幕中心显示窗口
    transparent: true,
    resizable: true,//是否可以拖拉窗口边框改变大小
    // icon: path.join(process.env.PUBLIC, 'electron-vite.svg'),
    icon: path.join(__dirname, '../public/logo.png'),
    autoHideMenuBar: false, // 隐藏默认菜单
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      nodeIntegration: true, // 渲染进程使用Node API
      contextIsolation: true, // 是否开启隔离上下文
      webviewTag: true, //允许使用 webview
      webSecurity: false, //允许跨域
      sandbox: false,
      partition: String(+new Date())
    },
  })
  // 窗口最大化
  // win.maximize();
  win.setMenu(null)
  // Test active push message to Renderer-process.
  win.webContents.on('did-finish-load', () => {
    win?.webContents.send('main-process-message', (new Date).toLocaleString())
  })
  // win.setBackgroundColor('rgb(255, 145, 145)')
  // 窗口菜单
  if (VITE_DEV_SERVER_URL) {
    win.loadURL(VITE_DEV_SERVER_URL);
    openDevTools && win?.webContents.openDevTools()
  } else {
    win.loadFile(path.join(process.env.DIST, 'index.html'))
  }
  // 窗口关闭
  // win.on('close', (e) => {
  //   e.preventDefault()
  //   // 窗口关闭提示弹框
  //   win && dialog.showMessageBox(win, {
  //     type: 'info',
  //     title: '提示',
  //     message: '请确认是否关闭？',
  //     buttons: ['确认', '取消'],
  //     cancelId: 1,
  //   }).then((idx) => {
  //     if (idx.response != 1) {
  //       // 关闭所有数据库连接
  //       closeDatabase()
  //       app.exit()
  //     }
  //   })
  // });
  ipcWindowInit(win, ipcMain, app); //Window-related message handling
  // Auto update
  // update(win)
}

// 当所有的窗口都被关闭时触发
app.on('window-all-closed', () => {
  win = null;
});

// 当Electron 初始化完成
app.whenReady().then(() => {
  app.AutoImportTask = new AutoImportTask(); //Create a task object
  ipcAppInit(app, ipcMain);
  // // 初始化数据库
  initDatabase()
  // 删除历史日志
  deleteHistoryLog()
  // 创建主窗口
  createWindow();
})